package org.ehe.erp.service.product;

import com.baomidou.mybatisplus.extension.service.IService;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;
import org.ehe.erp.domain.product.ErpProductArrival;
import org.ehe.erp.domain.product.bo.ErpProductArrivalBo;
import org.ehe.erp.domain.product.vo.ErpProductArrivalVo;

import java.util.Collection;
import java.util.List;

/**
 * @author :zhangnn
 * @className :ErpProductArrivalService
 * @description: TODO
 * @date 2025-08-19 09:16:14
 */
public interface ErpProductArrivalService extends IService<ErpProductArrival> {

    /**
     * 查询产品到货信息
     *
     * @param id 产品到货信息主键
     * @return 产品到货信息
     */
    ErpProductArrivalVo queryById(Long id);

    /**
     * 查询产品到货信息列表
     *
     * @param bo        产品到货信息
     * @param pageQuery 分页查询条件
     * @return 产品到货信息集合
     */
    TableDataInfo<ErpProductArrivalVo> queryPageList(ErpProductArrivalBo bo, PageQuery pageQuery);

    /**
     * 新增产品到货信息
     *
     * @param bo 产品到货信息
     * @return 结果
     */
    Boolean insertByBo(List<ErpProductArrivalBo> bo);

    /**
     * 修改产品到货信息
     *
     * @param bo 产品到货信息
     * @return 结果
     */
    Boolean updateByBo(List<ErpProductArrivalBo> bo);

    /**
     * 校验并批量删除产品到货信息
     *
     * @param ids     需要删除的产品到货信息主键集合
     * @param isValid 是否校验,true-删除前校验,false-不校验
     * @return 结果
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 检查付款单号是否存在
     *
     * @param no 付款单号
     * @return true-存在, false-不存在
     */
    boolean checkNoExists(String no);

    /**
     * 检查付款单号是否存在（排除自身）
     *
     * @param no 付款单号
     * @param id 排除的ID
     * @return true-存在, false-不存在
     */
    boolean checkNoExistsExcludeSelf(String no, Long id);

    /**
     * 根据批次ID查询到货信息列表
     *
     * @param batchId 批次ID
     * @return 到货信息列表
     */
    List<ErpProductArrivalVo> queryByBatchId(Long batchId);

    /**
     * 根据供应商ID查询到货信息列表
     *
     * @param supplierId 供应商ID
     * @return 到货信息列表
     */
    List<ErpProductArrivalVo> queryBySupplierId(Long supplierId);

    /**
     * 批量更新状态
     *
     * @param ids    主键集合
     * @param status 状态
     * @return 结果
     */
    Boolean updateStatusByIds(Collection<Long> ids, Integer status);
}
